[アップデート] Amazon SES のメールトラッキングオプションでカスタムドメインでも HTTPS が使えるようになりました
いわさです。
Amazon SES では送信したメールが開封されているのかなどの状況をトラッキングするための仕組みがあります。
HTML メールに非表示で 1px の img タグが埋め込まれており、メールクライアントで表示することで Get リクエストが送信され、それを持って開封したかどうか判断されています。Web ビーコンなんて呼ばれ方をすることもあると思います。
この埋め込まれる img タグはデフォルトでは AWS が提供するドメインが使用されるのですが、カスタムドメインを使うことも出来ます。
ただし、従来はカスタムドメインを使った際には HTTP が前提となり、HTTPS の利用が出来ませんでした。
カスタムドメインの HTTPS が設定出来るように
先日のアップデートでトラッキング URL にカスタムドメインを使う場合でも HTTPS が構成出来るようになりました。これによってセキュリティポリシーなどでカスタムドメインが採用出来なかった場合や、安全ではないリンクと見なされてトラッキング URL が開かれない問題を解決することが出来ます。
設定手順は次の公式ドキュメントに記載されていまして、ちょっと迷うところもあったのですが実際に検証してみましたのでより詳細な手順を紹介します。
やってみる
デフォルト
まずは本機能を使わなかった状態のデフォルトのトラッキングリンクの内容を確認してみましょう。
そこからオプションを有効化してどのような手順でどういう変化が発生するのか理解しながら進めます。
トラッキング URL のカスタムドメイン設定は Amazon SES の設定セットで行うのですが、デフォルトでは特に何も指定していない状態です。
HTML メールをテスト送信してみます。
受信したメールの RAW データはこんな感じになっていました。Base64 エンコードされていたので本文をデコードしてみましょう。
:
------=_Part_1338304_1576678479.1727727152262
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
44OH44OV44Kp44Or44OI5qeL5oiQ44CB44Kr44K544K/44Og44OJ44Oh44Kk44Oz6Kit5a6a44Gq
44GXPGltZyBhbHQ9IiIgc3JjPSJodHRwczovL3k0eDlxN2trLnIuYXAtbm9ydGhlYXN0LTEuYXdz
dHJhY2subWUvSTAvMDEwNjAxOTI0NDkwMmM4Ni03YTY1YTU4OC0wOTlhLTQyMzYtODk4ZC1lMjNl
YWFiMDQyZjYtMDAwMDAwL19uRzJnUGZBWlp2MzQzQzZVVGpUZVFVcHdsbz0xNzgiIHN0eWxlPSJk
aXNwbGF5OiBub25lOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsiPg0K
------=_Part_1338304_1576678479.1727727152262--
こちらをデコードした結果が以下です。Web ビーコンが設定されてるのが確認出来ます。
デフォルトドメインはy4x9q7kk.r.ap-northeast-1.awstrack.me
で、HTTPS が使われていますね。y4x9q7kk
はおそらく検証 ID や AWS アカウントごとで違う感じでしょうかね。
デフォルト構成、カスタムドメイン設定なし<img alt="" src="https://y4x9q7kk.r.ap-northeast-1.awstrack.me/I0/0106019244902c86-7a65a588-099a-4236-898d-e23eaab042f6-000000/_nG2gPfAZZv343C6UTjTeQUpwlo=178" style="display: none; width: 1px; height: 1px;">
カスタムドメイン + HTTP
では、次にカスタムドメインを使ってみます。
これまではカスタムドメインの場合は HTTP のみだったため、ただカスタムドメインでトラッキング用ドメインへの名前解決をしてやるだけで済んでいました。
次のような感じです。
上記の名前解決が出来る状態で、さらに設定セット上の追跡オプションにてカスタムリダイレクトドメインを設定します。
既存の認証済みドメインのサブドメインである必要がありますが、このトラッキング用サブドメインは SES 上で検証済みである必要はありません。DNS レコードのみで OK です。
この状態で受信したメールを確認してみると、次のような img タグが設定されていました。
WebビーコンがHTTPになる想定<img alt="" src="http://track.mail1.tak1wa.com/CI0/01060192449e721d-45ae6cfa-09cb-4deb-9e72-f47244ddff40-000000/utEZ2mxmyWB2-qHpYiIzuaRBOpZXw6erxlb8PnYQVRI=178" style="display: none; width: 1px; height: 1px;">
カスタムドメインが設定はされていますが、HTTP ですね。
カスタムドメイン + HTTPS(今回のアップデート)
ではここから今回のアップデートを試してみましょう。
まず、先程の設定セットのカスタムリダイレクトドメインの設定で HTTPS ポリシーが選択出来るようになっていますので、「必須」あるいは「開封に必要」を選択します。
ここからがちょっと面倒なのですが、カスタムドメインで HTTPS 構成を取る場合は色々と追加でやらねばならぬことがあります。
CloudFront を構成
まず、トラッキングに使う HTTPS エンドポイントの受け口ですが、CloudFront ディストリビューションになります。
ディストリビューションのカスタムオリジンとしてr.ap-northeast-1.awstrack.me
を設定します。
リージョンごとにオリジン URL は異なっており、前述の公式ドキュメントに従って適切な URL を指定します。
また、事前に ACM で SSL 証明書を用意しておきます。
CloudFront ディストリビューションに対して代替ドメイン名と SSL 証明書を設定します。
最後に、Route 53 でカスタムドメインの名前解決先を CloudFront ディストリビューションに設定しましょう。
CNAME でもエイリアスでも良いです。
トラッキング用ID の検証
で、通常の HTTPS 構成であれば上記で良さそうに思えるのですが、まだ必要な手順があります。
どうやらトラッキング用のカスタムサブドメインを SES 上でドメイン検証しておく必要があるようです。
今回でいうと@mail1.tak1wa.com
のトラッキング用にhttps://track2.mail1.tak1wa.com/
を使いたいので、track2.mail1.tak1wa.com
を検証する必要があります。ちょっと謎ですがそういうものみたいです!
ちなみにこれを行わずにカスタムドメイン + HTTPS を使おうとすると、デフォルトドメインで送信されますので注意を。
検証の手順は割愛しますが、最終的にはこんな感じになりました。
最後にテストメールを送信してみましょう。
受信したメールを確認してみると、次のようにトラッキング URL がカスタムドメイン + HTTPS で設定されていました。よし。
さいごに
本日は Amazon SES のメールトラッキングオプションでカスタムドメインでも HTTPS が使えるようになったので試してみました。
HTTP → HTTPS 化の過程で思っていたよりも大分追加の設定が必要でしたが、無事カスタムドメインを HTTPS で使うことが出来ました。
トラッキング URL まで意識しないことも多いと思いますが、こういった設定があるということを知る良いきっかけになればと思います。